/*
 * @lc app=leetcode.cn id=150 lang=cpp
 *
 * [150] 逆波兰表达式求值
 */

// @lc code=start
class Solution
{
public:
    int evalRPN(vector<string> &tokens)
    {
        //逆波兰表达式求值 先用一个栈保存 遇到数字直接存入 遇到运算符弹出字符计算后存入
        //只有加减乘除
        stack<int> st;
        for (int i = 0; i < tokens.size(); i++)
        {
            if (tokens[i] == "+" || tokens[i] == "-" ||
                tokens[i] == "*" || tokens[i] == "/")
            {
                //遇到运算符弹出两个数字
                int a = st.top();
                st.pop();
                int b = st.top();
                st.pop();
                //因为是字符串不能直接用 需要判断一下
                if (tokens[i] == "+")
                {
                    st.push(a + b);
                }
                else if (tokens[i] == "-")
                {
                    st.push(a - b);
                }
                else if (tokens[i] == "*")
                {
                    st.push(a * b);
                }
                else if (tokens[i] == "/")
                {
                    st.push(a / b);
                }
            }
            else
            {
                st.push(stoi(tokens[i]));
            }
                }
        return st.top();
    }
};
// @lc code=end
